// 最长上升子序列

#include <bits/stdc++.h>
using namespace std;

int a[1000]; // 原始序列
int F[1000]; // 第i位的最长上升子序列的长度

// 举例：
// a[]: 5 2 8 4 6 1 3 9 7
// F[]: 1 1 2 2 3 1 2 4 4
// L[]: x 2 0 0 0 0 0 0 0 0 长度为i的上升子序列中末端的最小值

int main()
{
    int n;
    cin >> n;

    cin >> a[0];
    F[0] = 1;

    for(int i=1; i<n; i++)
    {
        cin >> a[i];
        F[i] = 1;

        for(int j=0; j<i; j++)
        {
            if(a[j] < a[i])
            {
                // 状态转移方程
                F[i] = max(F[i], F[j]+1);
            }
        }
    }

    int m = 0;
    for(int i=0; i<n; i++)
        m = max(m, F[i]);
    cout << m << endl;

    return 0;
}
